#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>


#define	MSG_STR "This message is from parent: Hello child process!"


int main(int argc, char **argv)
{
	int	pipe_fd[2] ;
	int	rv ;
	int	pid ;
	char	buf[128] ;
	int	wstatus ;

	
	if( pipe(pipe_fd) < 0 )
	{
		printf("Create pipe failure: %s\n",strerror(errno)) ;
		return -1 ;
	}
	
	if( (pid = fork()) < 0)
	{
		printf("Create child process failure: %s\n",strerror(errno)) ;
		return -2 ;
	}	
	else if(pid == 0)
	{
		/*	child process close write endpoint, then read data from parent process	*/
		close(pipe_fd[1]) ;

		memset(buf, 0, sizeof(buf)) ;
		rv = read(pipe_fd[0], buf, sizeof(buf) ) ;
		if(rv < 0)
		{
			printf("Child process read from pipe failure: %s\n", strerror(errno)) ;
			return -3 ;
		}
		
		printf("Child process read %d bytes data from pipe: \"%s\"\n", rv, buf) ;
		return 0 ;
	
	}

	/*	parent process close read endpoint, then write data to child process	*/
	close(pipe_fd[0]) ;
	if(write(pipe_fd[1], MSG_STR, strlen(MSG_STR)) < 0)
	{
		printf("Parent process write data to pipe failure: %s\n", strerror(errno)) ;
		return -3 ;
	}

	printf("Parent start wait child process exit...\n") ;
	wait(&wstatus) ;










	return 0 ;
}
